]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
osdWindow: Fix level bar width
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 3 Jun 2016 23:29:07 +0000 (01:29 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Tue, 5 Jul 2016 15:47:44 +0000 (17:47 +0200)
Commit 9b07ce1d0d changed the OSD window's level bar to be a regular
actor instead of a custom drawn bar. The bar actor's width depends on
both the configured level (e.g. 40%) and the available width, however
the width is currently only updated when the configured level changes.
Fix that by properly considering changes to the parent's width as well.

https://bugzilla.gnome.org/show_bug.cgi?id=768317

js/ui/osdWindow.js

index 53ccc976c522f09c119069f9d6895f227d1329e8..c33e937755fdc41378e2b9c2198cfc448145d1e4 100644 (file)
@@ -27,6 +27,8 @@ const LevelBar = new Lang.Class({
         this._bar = new St.Widget({ style_class: 'level-bar' });
 
         this.actor.set_child(this._bar);
+
+        this.actor.connect('notify::width', () => { this.level = this.level; });
     },
 
     get level() {
@@ -34,14 +36,12 @@ const LevelBar = new Lang.Class({
     },
 
     set level(value) {
-        let newValue = Math.max(0, Math.min(value, 100));
-        if (newValue == this._level)
-            return;
-        this._level = newValue;
+        this._level = Math.max(0, Math.min(value, 100));
 
-        let width = this.actor.width;
-        width *= (this._level / 100.);
-        this._bar.width = width;
+        let alloc = this.actor.get_allocation_box();
+        let newWidth = (alloc.x2 - alloc.x1) * this._level / 100;
+        if (newWidth != this._bar.width)
+            this._bar.width = newWidth;
     }
 });